Entity Framework (EF) Core তে Shadow Properties এবং Backing Fields হল এমন দুটি বৈশিষ্ট্য যা মডেল কনফিগারেশন এবং ডেটাবেস সঞ্চয়ের ক্ষেত্রে বিশেষভাবে গুরুত্বপূর্ণ। এগুলি ডেটা মডেল এবং ডেটাবেসের মধ্যে সম্পর্ক প্রতিষ্ঠা করতে এবং কার্যকরীভাবে ডেটাবেস পরিচালনা করতে সহায়তা করে।
Shadow Properties এমন প্রপার্টি যা Entity ক্লাসে সংজ্ঞায়িত করা হয় না, তবে EF Core ডেটাবেসের জন্য এটি তৈরি করে। এই প্রপার্টি আপনার ক্লাসের অংশ না হয়েও Entity Framework দ্বারা ট্র্যাক করা এবং ম্যানেজ করা হয়। Shadow Properties মূলত তখন ব্যবহৃত হয় যখন আপনার মডেলে কোন নির্দিষ্ট প্রপার্টি প্রদর্শন করা বা ম্যানেজ করা প্রয়োজন না, কিন্তু ডেটাবেসে সেই প্রপার্টি থাকতে হবে।
EF Core তে Shadow Properties তৈরি করার জন্য, আপনি OnModelCreating মেথডে modelBuilder ব্যবহার করে এই প্রপার্টি কনফিগার করতে পারেন।
ধরা যাক, আপনি Order
ক্লাসে একটি LastModified
প্রপার্টি যুক্ত করতে চান, কিন্তু আপনি এই প্রপার্টি ক্লাসের মধ্যে সংজ্ঞায়িত করতে চান না, বরং EF Core নিজেই তা ট্র্যাক করুক।
public class Order
{
public int OrderId { get; set; }
public string OrderName { get; set; }
// LastModified property is a shadow property
}
এখন OnModelCreating মেথডে LastModified
নামে একটি Shadow Property তৈরি করা হবে:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Order>()
.Property<DateTime>("LastModified"); // Shadow Property
}
এখানে, LastModified
প্রপার্টি Order
ক্লাসে ডিফাইন করা হয়নি, কিন্তু EF Core এটি ডেটাবেসে একটি কলাম হিসেবে ট্র্যাক করবে।
Shadow Properties অ্যাক্সেস করতে, EF.Property মেথড ব্যবহার করা হয়:
var lastModified = context.Entry(order).Property("LastModified").CurrentValue;
এভাবে, Shadow Property টির মান অ্যাক্সেস বা পরিবর্তন করা যায়।
Backing Fields হল প্রাইভেট ফিল্ড যা একটি পাবলিক প্রপার্টি দ্বারা রিড বা রাইট করা হয়, কিন্তু EF Core ঐ প্রপার্টির মূল মানকে ট্র্যাক করার জন্য ফিল্ডটি ব্যবহার করে। এটি মূলত Encapsulation এর সুবিধা প্রদান করে, যেখানে আপনি প্রপার্টির মানের উপর নিয়ন্ত্রণ রাখতে পারেন কিন্তু ডেটাবেস স্তরে এই মানটি EF Core দ্বারা ম্যানেজ করা হয়।
EF Core তে Backing Fields ব্যবহার করার প্রধান উদ্দেশ্য হল, ডেটাবেসের সঙ্গে সম্পর্কিত কোন প্রপার্টি ম্যানিপুলেট করার সময় আপনি সেই প্রপার্টির getter
বা setter
মেথডের মধ্যে কাস্টম লজিক প্রয়োগ করতে পারেন।
EF Core এ Backing Fields কনফিগার করতে, আপনি সাধারণত HasField
এবং UsePropertyAccessMode
মেথড ব্যবহার করেন।
ধরা যাক, আপনি Person
ক্লাসে একটি প্রপার্টি FullName
তৈরি করতে চান যা শুধুমাত্র FirstName
এবং LastName
ফিল্ড দ্বারা তৈরি হবে, তবে প্রপার্টি হিসাবে FullName
প্রদর্শিত হবে।
public class Person
{
private string _fullName;
public string FirstName { get; set; }
public string LastName { get; set; }
// Backing field for FullName property
public string FullName
{
get => _fullName ?? $"{FirstName} {LastName}";
private set => _fullName = value;
}
}
এখানে, FullName
প্রপার্টি FirstName
এবং LastName
ফিল্ডের মানের ওপর নির্ভরশীল, এবং FullName
এর জন্য একটি Backing Field _fullName
ব্যবহৃত হচ্ছে।
এখন OnModelCreating মেথডে Backing Field
কনফিগার করা যাবে:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Person>()
.Property(p => p.FullName)
.HasField("_fullName"); // Set the backing field for FullName
}
এভাবে, EF Core এই ফিল্ডটিকে ট্র্যাক করে, এবং যখন FullName
পরিবর্তিত হয়, তখন _fullName
ফিল্ডে পরিবর্তন ঘটে।
বিষয় | Shadow Properties | Backing Fields |
---|---|---|
সংজ্ঞায়িত করা | ক্লাসে ডিফাইন করা হয় না, EF Core দ্বারা তৈরি হয়। | ক্লাসে প্রাইভেট ফিল্ড দিয়ে সংজ্ঞায়িত হয়। |
কনফিগারেশন | modelBuilder.Property দিয়ে কনফিগার করা হয়। | modelBuilder.Property.HasField দিয়ে কনফিগার করা হয়। |
ব্যবহার | ডেটাবেসে কলাম হিসাবে ব্যবহার করা হয়। | প্রপার্টি ও ফিল্ডের মধ্যে সম্পর্ক স্থাপন করা হয়। |
অ্যাক্সেস | EF.Property মেথডের মাধ্যমে অ্যাক্সেস করা হয়। | সাধারণ প্রপার্টি getter ও setter মেথডের মাধ্যমে অ্যাক্সেস করা হয়। |
Shadow Properties এবং Backing Fields উভয়ই EF Core এর জন্য শক্তিশালী টুলস যা আপনাকে ডেটাবেসের সঠিক ব্যবস্থাপনা এবং প্রপার্টির উপর নিয়ন্ত্রণ রাখতে সাহায্য করে। Shadow Properties ব্যবহার করে আপনি প্রপার্টি ছাড়া ডেটাবেস টেবিল তৈরি করতে পারবেন, যেখানে Backing Fields দিয়ে আপনি ডেটাবেস এবং মডেল লেভেলে কাস্টম লজিক প্রয়োগ করতে পারবেন।
common.read_more